import java.io.*;
import java.net.*;

public class Client {
	
	/**
	 * Stringa che contiene il messaggio da stampare dopo essersi connessi
	 */
	private static final String header = "Inserisci il testo da inviare. Digita 'END' per terminare";
	
	/**
	 * Stringa che contiene il messaggio di scelta degli ip
	 */
	private static final String headerIp = "Inserisci L'hostame o l'ip al quale vuoi connetterti (Digita 0 per il default)";
	
	/**
	 * Porta alla quale connettersi
	 */
	private static int port=20121;
	
	/**
	 * Host predefinito al quale connettersi
	 */
	private static String host="localhost";
	
	/**
	 * Metodo principale del Client
	 */
	public static void main(String argv[]) {
		
		InetAddress addr = null;
		
		try {	
			/**
			 * Buffer usato per i/o 
			 */
			BufferedReader lettore = new BufferedReader( new InputStreamReader( System.in ) );
			/**
			 * Memorizza i messaggi inviati dal Server
			 */
			String letto;
			/**
			 * Memorizza il testo letto da tastiera
			 */
			String msg;

			System.out.println(headerIp); // stampo header per dire di scegliere l'ip
			letto=lettore.readLine();
			if(!letto.equalsIgnoreCase("0")){ // devo usare un' altro host/ip
				host=letto;
				//System.out.println("NON DEFAULT");
			}
			
			addr = InetAddress.getByName(host); // creo l'indirizzo dalla stringa
			Socket socket = new Socket(addr,port);
			PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream() ) ),true );
			
			BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) ); // lettura di dati che vengono dal server
						
			System.out.println(header);	// stampo l'header per l'utilizzo del client
			do {
				letto = lettore.readLine();
				out.println(letto);
				msg = in.readLine();
				
				System.out.println(msg);
			}
			while(!letto.equalsIgnoreCase("end"));
			
			// Chiudi gli stream
			socket.close();
			out.close();
			in.close();
		}
		catch(UnknownHostException e){
			System.out.println("ERRORE: Host sconosciuto");
		} 
		catch(ConnectException e) {
			System.out.println("ERRORE: Connessione terminata per "+e.getMessage());
		}
		catch(IOException e) {
			System.out.println("ERRORE IO: "+e);
		}
		
	}
}//class